package logica;

import javax.ejb.Stateless;
import javax.inject.Inject;

import jms.EnviarMensaje;
import clienteWS_BCE.Transferencia;
import model.Cliente;
import model.Cuenta;
import model.RespuestaAgencia;
import model.TransferenciaEntrante;
import DAO.CuentaDAO;
import DAO.TransferenciaDAO;

@Stateless
public class TransferenciaEntranteValidacion {
	@Inject
	TransferenciaDAO transDAO;
	@Inject
	CuentaDAO ctaDAO;
	@Inject
	EnviarMensaje clienteJMS;
	private  String codigoBanco=utils.DatosBanco.codigoBanco;
	private  String nombreBanco=utils.DatosBanco.nombreBanco;
	
	public RespuestaAgencia procesarTransferencia(TransferenciaEntrante transfer)
	{
		RespuestaAgencia respuesta=new RespuestaAgencia();
		respuesta.setCodigo(0);
		try{
		Cuenta cdestino=ctaDAO.buscar(transfer.getCta_destino());
		if(cdestino!=null)
			if(cdestino.getCtaEstado().equalsIgnoreCase("Activo"))
				if(cdestino.getCliente().getCliCedula().equalsIgnoreCase(transfer.getCedula_cliente_destino()))
					if(cdestino.getCtaTipo().equalsIgnoreCase(transfer.getTipo_Cuenta()))
					{
							acreditar(cdestino, transfer);
							enviarCorreoConfirmacion(cdestino.getCliente(), transfer);
							respuesta.setCodigo(1);
							respuesta.setMensaje("Transferencia completada....");
					}
					else respuesta.setMensaje("La cuenta destino no es de tipo "+transfer.getTipo_Cuenta());
				else respuesta.setMensaje("La cuenta destino no pertenece al cliente con cedula: "+transfer.getCedula_cliente_destino());
			else respuesta.setMensaje("La cuenta destino no esta activa");
		else respuesta.setMensaje("No existe la cuenta destino");
		}catch(Exception e)
		{
			respuesta.setMensaje("Error al acreditar el monto....");
		}
		return respuesta;	
	}	
	public void acreditar(Cuenta cdestino, TransferenciaEntrante transfer)
	{
		System.out.println("Acreditando dinero a la cuenta");
		transfer.setTipo_Transaccion("3");//entrante
		transDAO.transferirEntrada(transfer);
	}
	public void enviarCorreoConfirmacion(Cliente cli,TransferenciaEntrante trans)
	{
		System.out.println("Enviando mail de confirmacion a "+cli.getCliMail());
		clienteJMS.enviarMensaje("Se ha realizado una transferencia hacia su cuenta "+trans.getCta_origen()+" desde el banco "+trans.getBco_cod_origen()+" cuenta #"+trans.getCta_origen()+" acreditando un monto de "+trans.getMonto(),
								nombreBanco+"Transferencia Recibida",
								cli.getCliMail());	
	}	
}